﻿<!DOCTYPE html>
<!--[if IE]><![endif]-->
<html>
  
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>DocFX Document Schema v1.0 Specification | DocFX website </title>
    <meta name="viewport" content="width=device-width">
    <meta name="title" content="DocFX Document Schema v1.0 Specification | DocFX website ">
    <meta name="generator" content="docfx 2.37.0.0">
    
    <link rel="shortcut icon" href="../favicon.ico">
    <link rel="stylesheet" href="../styles/docfx.vendor.css">
    <link rel="stylesheet" href="../styles/docfx.css">
    <link rel="stylesheet" href="../styles/main.css">
    <meta property="docfx:navrel" content="../toc.html">
    <meta property="docfx:tocrel" content="toc.html">
    
    <meta property="docfx:rel" content="../">
    
  </head>
  <body data-spy="scroll" data-target="#affix" data-offset="120">
    <div id="wrapper">
      <header>
        
        <nav id="autocollapse" class="navbar navbar-inverse ng-scope" role="navigation">
          <div class="container">
            <div class="navbar-header">
              <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
              </button>
              
              <a class="navbar-brand" href="../index.html">
                <img id="logo" class="svg" src="../logo.svg" alt="">
              </a>
            </div>
            <div class="collapse navbar-collapse" id="navbar">
              <form class="navbar-form navbar-right" role="search" id="search">
                <div class="form-group">
                  <input type="text" class="form-control" id="search-query" placeholder="Search" autocomplete="off">
                </div>
              </form>
            </div>
          </div>
        </nav>
        
        <div class="subnav navbar navbar-default">
          <div class="container hide-when-search" id="breadcrumb">
            <ul class="breadcrumb">
              <li></li>
            </ul>
          </div>
        </div>
      </header>
      <div class="container body-content">
        
        <div id="search-results">
          <div class="search-list"></div>
          <div class="sr-items">
            <p><i class="glyphicon glyphicon-refresh index-loading"></i></p>
          </div>
          <ul id="pagination"></ul>
        </div>
      </div>
      <div role="main" class="container body-content hide-when-search">
        
        <div class="sidenav hide-when-search">
          <a class="btn toc-toggle collapse" data-toggle="collapse" href="#sidetoggle" aria-expanded="false" aria-controls="sidetoggle">Show / Hide Table of Contents</a>
          <div class="sidetoggle collapse" id="sidetoggle">
            <div id="sidetoc"></div>
          </div>
        </div>
        <div class="article row grid-right">
          <div class="col-md-10">
            <article class="content wrap" id="_content" data-uid="">
<h1 id="docfx-document-schema-v10-specification">DocFX Document Schema v1.0 Specification</h1>

<h2 id="1-introduction">1. Introduction</h2>
<p>DocFX supports different <a href="../tutorial/howto_build_your_own_type_of_documentation_with_custom_plug-in.html">document processors</a> to handle different kinds of input. For now, if the data model changes a bit, a new document processor is needed, even most of the work in processors are the same.</p>
<p>DocFX Document Schema (abbreviated to <em>THIS schema</em> below) is introduced to address this problem. This schema is a JSON media type for defining the structure of a DocFX document. This schema is intended to <strong>annotate</strong>, <strong>validate</strong> and <strong>interpret</strong> the document data.</p>
<h2 id="2-conventions-and-terminology">2. Conventions and Terminology</h2>
<p>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;, &quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;MAY&quot;, and &quot;OPTIONAL&quot; in this document are to be interpreted as described in <a href="https://tools.ietf.org/html/rfc2119">RFC 2119</a>.</p>
<h2 id="3-overview">3. Overview</h2>
<p>DocFX Document Schema is in <a href="http://www.json.org/">JSON</a> format. It borrows most syntax from <a href="http://json-schema.org/">JSON Schema</a>, while it also introduces some other syntax to manipulate the data.</p>
<h3 id="31-annotation">3.1 Annotation</h3>
<p><em>THIS schema</em> is a JSON based format for the structure of a DocFX document.</p>
<h3 id="32-validation">3.2 Validation</h3>
<p><a href="http://json-schema.org/latest/json-schema-validation.html">JSON schema validation</a> already defines many keywords. This schema starts from supporting limited keyword like <code>type</code>, <code>properties</code>.</p>
<h3 id="33-interpretation">3.3 Interpretation</h3>
<p>Besides annotate and validate the input document model, <em>THIS schema</em> also defines multiple interpretations for each property of the document model.
For example, a property named <code>summary</code> contains value in Markdown format, <em>THIS schema</em> can define a <code>markup</code> interpretation for the <code>summary</code> property, so that the property can be marked using <a href="docfx_flavored_markdown.html">DFM</a> syntax.</p>
<h2 id="4-general-considerations">4. General Considerations</h2>
<ul>
<li><em>THIS schema</em> leverages JSON schema definition, that is to say, keywords defined in JSON schema keeps its meaning in <em>THIS schema</em> when it is supported by <em>THIS schema</em>.</li>
</ul>
<h2 id="5-detailed-specification">5. Detailed Specification</h2>
<h3 id="format">Format</h3>
<p>The files describing DocFX document model in accordance with the DocFX document schema specification are represented as JSON objects and conform to the JSON standards. YAML, being a superset of JSON, can be used as well to represent a DocFX document schema specification file.</p>
<p>All field names in the specification are <strong>case sensitive</strong>.</p>
<p>This schema exposes two types of fields. Fixed fields, which have a declared name, and Patterned fields, which declare a regex pattern for the field name. Patterned fields can have multiple occurrences as long as each has a unique name.</p>
<p>By convention, the schema file is suffixed with <code>.schema.json</code>.</p>
<h3 id="data-types">Data Types</h3>
<p>Primitive data types in <em>THIS schema</em> are based on <a href="http://json-schema.org/latest/json-schema-core.html#rfc.section.4.2">JSON schema Draft 6 4.2 Instance</a></p>
<h3 id="schema">Schema</h3>
<p>For a given field, <code>*</code> as the starting character in <em>Description</em> cell stands for <strong>required</strong>.</p>
<h4 id="schema-object">Schema Object</h4>
<p>This is the root document object for <em>THIS schema</em>.</p>
<h5 id="fixed-field">Fixed Field</h5>
<table>
<thead>
<tr>
<th>Field Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>$schema</td>
<td>string</td>
<td><code>*</code>The version of the schema specification, for example, <code>https://github.com/dotnet/docfx/v1.0/schema#</code>.</td>
</tr>
<tr>
<td>version</td>
<td>string</td>
<td><code>*</code>The version of current schema object.</td>
</tr>
<tr>
<td>id</td>
<td>string</td>
<td>It is best practice to include an <code>id</code> property as an unique identifier for each schema.</td>
</tr>
<tr>
<td>title</td>
<td>string</td>
<td>The title of current schema, <code>LandingPage</code>, for example. In DocFX, this value can be used to determine what kind of documents apply to this schema, If not specified, file name before <code>schema.json</code> of this schema is used. Note that <code>.</code> is not allowed.</td>
</tr>
<tr>
<td>description</td>
<td>string</td>
<td>A short description of current schema.</td>
</tr>
<tr>
<td>type</td>
<td>string</td>
<td><code>*</code>The type of the root document model MUST be <code>object</code>.</td>
</tr>
<tr>
<td>properties</td>
<td><a href="#property-definitions-object">Property Definitions Object</a></td>
<td>An object to hold the schema of all the properties.</td>
</tr>
<tr>
<td>metadata</td>
<td>string</td>
<td>In <code>json-pointer</code> format as defined in <a href="http://json-schema.org/latest/json-schema-validation.html#rfc.section.8.3.9">http://json-schema.org/latest/json-schema-validation.html#rfc.section.8.3.9</a>. The format for JSON pointer is defined by <a href="https://tools.ietf.org/html/rfc6901">https://tools.ietf.org/html/rfc6901</a>, referencing to the metadata object. Metadata object is the object to define the metadata for current document, and can be also set through <code>globalMetadata</code> or <code>fileMetadata</code> in DocFX. The default value for metadata is empty which stands for the root object.</td>
</tr>
</tbody>
</table>
<h5 id="patterned-field">Patterned Field</h5>
<table>
<thead>
<tr>
<th>Field Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>^x-</td>
<td>Any</td>
<td>Allows extensions to <em>THIS schema</em>. The field name MUST begin with x-, for example, x-internal-id. The value can be null, a primitive, an array or an object.</td>
</tr>
</tbody>
</table>
<h4 id="property-definitions-object">Property Definitions Object</h4>
<p>It is an object where each key is the name of a property and each value is a schema to describe that property.</p>
<h5 id="patterned-field-1">Patterned Field</h5>
<table>
<thead>
<tr>
<th>Field Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>{name}</td>
<td><a href="#property-object">Property Object</a></td>
<td>The schema object for the <code>{name}</code> property</td>
</tr>
</tbody>
</table>
<h4 id="property-object">Property Object</h4>
<p>An object to describe the schema of the value of the property.</p>
<h5 id="fixed-field-1">Fixed Field</h5>
<table>
<thead>
<tr>
<th>Field Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>title</td>
<td>string</td>
<td>The title of the property.</td>
</tr>
<tr>
<td>description</td>
<td>string</td>
<td>A lengthy explanation about the purpose of the data described by the schema.</td>
</tr>
<tr>
<td>default</td>
<td>what <code>type</code> defined</td>
<td>The default value for current field.</td>
</tr>
<tr>
<td>type</td>
<td>string</td>
<td>The type of the root document model. Refer to <a href="#61-type">type keyword</a> for detailed description.</td>
</tr>
<tr>
<td>properties</td>
<td><a href="#property-definitions-object">Property Definitions Object</a></td>
<td>An object to hold the schema of all the properties if <code>type</code> for the model is <code>object</code>. Omitting this keyword has the same behavior as an empty object.</td>
</tr>
<tr>
<td>items</td>
<td><a href="#property-object">Property Object</a></td>
<td>An object to hold the schema of the items if <code>type</code> for the model is <code>array</code>. Omitting this keyword has the same behavior as an empty schema.</td>
</tr>
<tr>
<td>reference</td>
<td>string</td>
<td>Defines whether current property is a reference to the actual value of the property. Refer to <a href="#62-reference">reference</a> for detailed explanation.</td>
</tr>
<tr>
<td>contentType</td>
<td>string</td>
<td>Defines the content type of the property. Refer to <a href="#63-contenttype">contentType</a> for detailed explanation.</td>
</tr>
<tr>
<td>tags</td>
<td>array</td>
<td>Defines the tags of the property. Refer to <a href="#64-tags">tags</a> for detailed explanation.</td>
</tr>
<tr>
<td>mergeType</td>
<td>string</td>
<td>Defines how to merge the property. Omitting this keyword has the same behavior as <code>merge</code>. Refer to <a href="#65-mergetype">mergeType</a> for detailed explanation.</td>
</tr>
<tr>
<td>xrefProperties</td>
<td>array</td>
<td>Defines the properties of current object when it is cross referenced by others. Each item is the name of the property in the instance. Refer to <a href="#66-xrefproperties">xrefProperties</a> for detailed description of how to leverage this property.</td>
</tr>
</tbody>
</table>
<h5 id="patterned-field-2">Patterned Field</h5>
<table>
<thead>
<tr>
<th>Field Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>^x-</td>
<td>Any</td>
<td>Allows extensions to <em>THIS schema</em>. The field name MUST begin with x-, for example, x-internal-id. The value can be null, a primitive, an array or an object.</td>
</tr>
</tbody>
</table>
<h2 id="6-keywords-in-detail">6. Keywords in detail</h2>
<h3 id="61-type">6.1 type</h3>
<p>Same as in JSON schema: <a href="http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.25">http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.25</a></p>
<blockquote>
<p>The value of this keyword MUST be either a string or an array. If it is an array, elements of the array MUST be strings and MUST be unique.</p>
<p>String values MUST be one of the six primitive types (&quot;null&quot;, &quot;boolean&quot;, &quot;object&quot;, &quot;array&quot;, &quot;number&quot;, or &quot;string&quot;), or &quot;integer&quot; which matches any number with a zero fractional part.</p>
<p>An instance validates if and only if the instance is in any of the sets listed for this keyword.</p>
</blockquote>
<h3 id="62-reference">6.2 reference</h3>
<p>It defines whether current property is a reference to the actual value of the property. The values MUST be one of the following:</p>
<table>
<thead>
<tr>
<th>Value</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>none</code></td>
<td>It means the property is not a reference.</td>
</tr>
<tr>
<td><code>file</code></td>
<td>It means current property stands for a file path that contains content to be included.</td>
</tr>
</tbody>
</table>
<h3 id="63-contenttype">6.3 contentType</h3>
<p>It defines how applications interpret the property. If not defined, the behavior is similar to <code>default</code> value. The values MUST be one of the following:</p>
<table>
<thead>
<tr>
<th>Value</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>default</code></td>
<td>It means that no interpretion will be done to the property.</td>
</tr>
<tr>
<td><code>uid</code></td>
<td><code>type</code> MUST be <code>string</code>. With this value, the property name MUST be <code>uid</code>. It means the property defines a unique identifier inside current document model.</td>
</tr>
<tr>
<td><code>href</code></td>
<td><code>type</code> MUST be <code>string</code>. It means the property defines a file link inside current document model. Application CAN help to validate if the linked file exists, and update the file link if the linked file changes its output path.</td>
</tr>
<tr>
<td><code>xref</code></td>
<td><code>type</code> MUST be <code>string</code>. It means the property defines a UID link inside current document model. Application CAN help to validate if the linked UID exists, and resolve the UID link to the corresponding file output link.</td>
</tr>
<tr>
<td><code>file</code></td>
<td><code>type</code> MUST be <code>string</code>. It means the property defines a file path inside current document model. Application CAN help to validate if the linked file exists, and resolve the path to the corresponding file output path. The difference between <code>file</code> and <code>href</code> is that <code>href</code> is always URL encoded while <code>file</code> is not.</td>
</tr>
<tr>
<td><code>markdown</code></td>
<td><code>type</code> MUST be <code>string</code>. It means the property is in <a href="..%5Cspec%5Cdocfx_flavored_markdown.md">DocFX flavored Markdown</a> syntax. Application CAN help to transform it into HTML format.</td>
</tr>
</tbody>
</table>
<h3 id="64-tags">6.4 tags</h3>
<p>The value of this keyword MUST be an <code>array</code>, elements of the array MUST be strings and MUST be unique. It provides hints for applications to decide how to interpret the property, for example, <code>localizable</code> tag can help Localization team to interpret the property as <em>localizable</em>.</p>
<h3 id="65-mergetype">6.5 mergeType</h3>
<p>The value of this keyword MUST be a string. It specifies how to merge two values of the given property. One use scenario is how DocFX uses the <a href="../tutorial/intro_overwrite_files.html">overwrite files</a> to overwrite the existing values. In the below table, we use <code>source</code> and <code>target</code> to stands for the two values for merging.</p>
<p>The value MUST be one of the following:</p>
<table>
<thead>
<tr>
<th>Value</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>key</code></td>
<td>If <code>key</code> for <code>source</code> equals to the one for <code>target</code>, these two values are ready to merge.</td>
</tr>
<tr>
<td><code>merge</code></td>
<td>The default behavior. For <code>array</code>, items in the list are merged by <code>key</code> for the item. For <code>string</code> or any value type, <code>target</code> replaces <code>source</code>. For <code>object</code>, merge each property along with its own <code>merge</code> value.</td>
</tr>
<tr>
<td><code>replace</code></td>
<td><code>target</code> replaces <code>source</code>.</td>
</tr>
<tr>
<td><code>ignore</code></td>
<td><code>source</code> is not allowed to be merged.</td>
</tr>
</tbody>
</table>
<h3 id="66-xrefproperties">6.6 xrefProperties</h3>
<p>The value of this keyword MUST be an array of <code>string</code>. Each <code>string</code> value is the property name of current object that will be exported to be <a href="docfx_flavored_markdown.html#cross-reference">Cross Referenced</a> by others.
To leverage this feature, a new <code>xref</code> syntax with <code>template</code> attribute is support:</p>
<pre><code class="lang-html">&lt;xref uid=&quot;{uid}&quot; template=&quot;{path_of_partial_template}&quot; /&gt;
</code></pre>
<p>For the parital template, the input model is the object containing properties <code>xrefProperties</code> defines.</p>
<p>For example, in the sample schema defined by <a href="#7-samples">7. Samples</a>, <code>&quot;xrefProperties&quot;: [ &quot;title&quot;, &quot;description&quot; ],</code>, <code>title</code> and <code>description</code> are <code>xrefProperties</code> for uid <code>webapp</code>. A partial template to render this xref, for example, named <code>partials/overview.tmpl</code>, looks like:</p>
<pre><code class="lang-mustache">{{title}}: {{{description}}}
</code></pre>
<p>When someone references this uid using <code>&lt;xref uid=&quot;webapp&quot; template=&quot;partials/overview.tmpl&quot;</code>, <code>docfx</code> expand this <code>xref</code> into the following html:</p>
<pre><code class="lang-html">Web Apps Documentation: &lt;p&gt;This is description&lt;/p&gt;
</code></pre>
<p>In this way, users can not only <em>cross reference</em> others to get the target url, but also <em>cross reference</em> other properties as they like.</p>
<p>A common usage of this is the <strong>Namespace</strong> page in ManagedReference. The <strong>Namespace</strong> page shows a table of its <strong>Classes</strong> with the <code>summary</code> of the <strong>Class</strong>, with the help of <code>xrefProperties</code>, the source of truth <code>summary</code> is always from <strong>Class</strong>. For the <strong>Namespace</strong> page, it can, for example:</p>
<ol>
<li>Define a <code>class.tr.tmpl</code> template: <code>&lt;tr&gt;&lt;td&gt;{{name}}&lt;/td&gt;&lt;td&gt;{{{summary}}}&lt;/td&gt;&lt;/tr&gt;</code></li>
<li>The namespace <code>namespace.tmpl</code> template, use <code>xref</code> to render its children classes:
<pre><code class="lang-mustache">{{#children}}
  &lt;xref uid=&quot;{{uid}}&quot; template=&quot;class.tr.tmpl&quot; /&gt;
{{/children}}
</code></pre>
</li>
</ol>
<h2 id="7-samples">7. Samples</h2>
<p>Here's an sample of the schema. Assume we have the following YAML file:</p>
<pre><code class="lang-yaml">### YamlMime:LandingPage
title: Web Apps Documentation
description: This is description
uid: webapp
metadata:
  title: Azure Web Apps Documentation - Tutorials, API Reference
  meta.description: Learn how to use App Service Web Apps to build and host websites and web applications.
  services: app-service
  author: apexprodleads
  manager: carolz
  ms.service: app-service
  ms.tgt_pltfrm: na
  ms.devlang: na
  ms.topic: landing-page
  ms.date: 01/23/2017
  ms.author: carolz
sections:
- title: 5-Minute Quickstarts
  children:
  - text: .NET
    href: app-service-web-get-started-dotnet.md
  - text: Node.js
    href: app-service-web-get-started-nodejs.md
  - text: PHP
    href: app-service-web-get-started-php.md
  - text: Java
    href: app-service-web-get-started-java.md
  - text: Python
    href: app-service-web-get-started-python.md
  - text: HTML
    href: app-service-web-get-started-html.md
- title: Step-by-Step Tutorials
  children:
  - content: &quot;Create an application using [.NET with Azure SQL DB](app-service-web-tutorial-dotnet-sqldatabase.md) or [Node.js with MongoDB](app-service-web-tutorial-nodejs-mongodb-app.md)&quot;
  - content: &quot;[Map an existing custom domain to your application](app-service-web-tutorial-custom-domain.md)&quot;
  - content: &quot;[Bind an existing SSL certificate to your application](app-service-web-tutorial-custom-SSL.md)&quot;
</code></pre>
<p>In this sample, we want to use the JSON schema to describe the overall model structure. Further more, the <code>href</code> is a file link. It need to be resolved from the relative path to the final href. The <code>content</code> property need to be marked up as a Markdown string. The <code>metadata</code> need to be tagged for further custom operations. We want to use <code>section</code>'s <code>title</code> as the key for overwrite <code>section</code> array.</p>
<p>Here's the schema to describe these operations:</p>
<pre><code class="lang-json">{
    &quot;$schema&quot;: &quot;https://dotnet.github.io/docfx/schemas/v1.0/schema.json#&quot;,
    &quot;version&quot;: &quot;1.0.0&quot;,
    &quot;id&quot;: &quot;https://github.com/dotnet/docfx/schemas/landingpage.schema.json&quot;,
    &quot;title&quot;: &quot;LandingPage&quot;,
    &quot;description&quot;: &quot;The schema for landing page&quot;,
    &quot;type&quot;: &quot;object&quot;,
    &quot;xrefProperties&quot;: [ &quot;title&quot;, &quot;description&quot; ],
    &quot;properties&quot;: {
        &quot;metadata&quot;: {
            &quot;type&quot;: &quot;object&quot;,
            &quot;tags&quot;: [ &quot;metadata&quot; ]
        },
        &quot;uid&quot;: {
            &quot;type&quot;: &quot;string&quot;,
            &quot;contentType&quot;: &quot;uid&quot;
        },
        &quot;sections&quot;: {
            &quot;type&quot;: &quot;array&quot;,
            &quot;items&quot;: {
                &quot;type&quot;: &quot;object&quot;,
                &quot;properties&quot;: {
                    &quot;children&quot;: {
                        &quot;type&quot;: &quot;array&quot;,
                        &quot;items&quot;: {
                            &quot;type&quot;: &quot;object&quot;,
                            &quot;properties&quot;: {
                                &quot;href&quot;: {
                                    &quot;type&quot;: &quot;string&quot;,
                                    &quot;contentType&quot;: &quot;href&quot;
                                },
                                &quot;text&quot;: {
                                    &quot;type&quot;: &quot;string&quot;,
                                    &quot;tags&quot;: [ &quot;localizable&quot; ]
                                },
                                &quot;content&quot;: {
                                    &quot;type&quot;: &quot;string&quot;,
                                    &quot;contentType&quot;: &quot;markdown&quot;
                                }
                            }
                        }
                    },
                    &quot;title&quot;: {
                        &quot;type&quot;: &quot;string&quot;,
                        &quot;mergeType&quot;: &quot;key&quot;
                    }
                }
            }
        },
        &quot;title&quot;: {
            &quot;type&quot;: &quot;string&quot;
        }
    }
}
</code></pre>
<h2 id="8-q--a">8. Q &amp; A</h2>
<ol>
<li>DocFX fills <code>_global</code> metadata into the processed data model, should the schema reflect this behavior?
<ul>
<li>Decision: <em>NOT</em> include, this schema is for <strong>input model</strong>, use another schema for output model.</li>
</ul>
</li>
<li>Is it necessary to prefix <code>d-</code> to every field that DocFX introduces in?
<ul>
<li>If keep <code>d-</code>
<ul>
<li>Pros:
<ol>
<li><code>d-</code> makes it straightforward that these keywords are introduced by DocFX</li>
<li>Keywords DocFX introduces in will never duplicate with the one preserved by JSON schema</li>
</ol>
</li>
<li>Cons:
<ol>
<li><code>d-</code> prefix provides a hint that these keywords are not <em>first class</em> keywords</li>
<li>Little chance that keywords DocFX defines duplicate with what JSON schema defines, after all, JSON schema defines a finite set of reserved keywords.</li>
<li>For example<a href="http://swagger.io/">Swagger spec</a> is also based on JSON schema and the fields it introduces in has no prefix.</li>
</ol>
</li>
</ul>
</li>
<li>Decision: <em>Remove</em> <code>d-</code> prefix.</li>
</ul>
</li>
</ol>
<div id="disqus_thread"></div>
                <script>
                (function() { // DON'T EDIT BELOW THIS LINE
                var d = document, s = d.createElement('script');
                s.src = 'https://docfx-github.disqus.com/embed.js';
                s.setAttribute('data-timestamp', +new Date());
                (d.head || d.body).appendChild(s);
                })();
                </script>
                <noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
            </article>
          </div>
          
          <div class="hidden-sm col-md-2" role="complementary">
            <div class="sideaffix">
              <div class="contribution">
                <ul class="nav">
                  <li>
                    <a href="#disqus_thread" class="contribution-link">0 Comments</a>
                  </li>
                </ul>
              </div>
              <nav class="bs-docs-sidebar hidden-print hidden-xs hidden-sm affix" id="affix">
              <!-- <p><a class="back-to-top" href="#top">Back to top</a><p> -->
              </nav>
            </div>
          </div>
        </div>
      </div>
      
      <footer>
        <div class="grad-bottom"></div>
        <div class="footer">
          <div class="container">
            <span class="pull-right">
              <a href="#top">Back to top</a>
            </span>
            <span>Copyright © 2015-2018 Microsoft<br>Generated by <strong>DocFX</strong></span>
            
          </div>
        </div>
      </footer>
    </div>
    
    <script type="text/javascript" src="../styles/docfx.vendor.js"></script>
    <script type="text/javascript" src="../styles/docfx.js"></script>
    <script type="text/javascript" src="../styles/main.js"></script>
    <script id="dsq-count-scr" src="//docfx-github.disqus.com/count.js" async=""></script>
    
    <script>
      (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
      m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
      })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
    
      ga('create', 'UA-99241001-1', 'auto');
      ga('send', 'pageview');
    
    </script>
  </body>
</html>
